home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / PowerFantasm™ 4.19a / Beginners guide / GUIDE EXAMPLES / EXAMPLE12.S < prev    next >
Text File  |  1997-04-01  |  3KB  |  79 lines

  1. ********************************************************************************
  2. *EXAMPLE 12 - Vertical scroll down demonstration FOR BEGINNERS GUIDE TO MAC MC *
  3. *AUTHOR    - STUART BALL JULY 94                                               *
  4. *SCREEN MUST BE SET TO 16  COLOUR MODE FOR THIS EXAMPLE                        *
  5. ********************************************************************************
  6. SCREENROW:    EQU    $0106    *WIDTH OF EAch screen line
  7. DEVICELIST:    EQU    $08A8    *THE ADDRESS OF DEVICELIST
  8. gdPMap_offset:    EQU    22
  9. DIST:    EQU    2    *VERTICAL SCROLL STEP IN PIXELS
  10.  
  11. EXAMPLE11:    MOVEM.L    A5-A6,-(SP)    *SAVE MAC WORLD
  12.     BSR    INIT    *INITIALISE OUR VARIABLES
  13.     
  14.     MOVE.L    #49,D0
  15. SCROLL_IT:    BSR    SCROLL_DOWN    *SCROLL THE SCREEN DOWN BY DIST PIXELS
  16.     DBRA    D0,SCROLL_IT    *50 TIMES
  17.     
  18.     MOVEM.L    (SP)+,A5-A6    *RESTORE MAC WORLD
  19.     RTS
  20. ************************END OF EXAMPLE 12***************************************
  21. **INIT SETS UP OUR VARIABLES
  22. INIT:    LEA    MY_VARS(PC),A6    *A6 IS OUR VARIABLE POINTER
  23.     MOVE.L    DEVICELIST,A0
  24.     MOVE.L    (A0),A0    *POINT TO DEVICELIST
  25.     MOVE.L    A0,A1    *COPY ADDRESS OF DEVICE LIST
  26.     MOVE.L    gdPMap_offset(A1),A1    *A1=POINTER TO GDPMAP
  27.     MOVE.L    (A1),A1        *gdPMap IN A1
  28.     MOVE.W    12(A1),LINE_LENGTH(A6)    *MAX X OF SCREEN
  29.     MOVE.W    10(A1),NUMB_OF_LINES(A6)    *MAX Y OF SCREEN
  30.     MOVE.L    (A1),VRAM_ADDR(A6)    *SAVE VRAM ABSOLUTE ADDRESS
  31.     RTS
  32.  
  33. **SCROLL_DOWN_8 SCROLLS THE SCREEN DOWN BY 8 PIXELS
  34. **EXPECTS VRAM_ADDR,NUMB_OF_LINES AND LINE_LENGTH TO BE SET UP.    
  35. SCROLL_DOWN:    MOVEM.L    D2-D7/A0-A1,-(SP)    *SAVE REGS
  36.     MOVE.L    VRAM_ADDR(A6),A0    *START OF VRAM
  37.     MOVE.W    SCREENROW,D7    *PHYSICAL LENGTH OF LINES
  38.     EXT.L    D7
  39.     MOVE.W    NUMB_OF_LINES(A6),D6    *LINES ON SCREEN
  40.     EXT.L    D6
  41.     MULS    D7,D6    *D6 = LAST LINE ON SCREEN
  42.     CLR.L    D5    *FOR LINE_LENGTH
  43.     MOVE.W    LINE_LENGTH(A6),D5
  44.     LSR.L    #1,D5    *DIVIDE BY 2 AS EACH PIXEL IS 4 BITS
  45.     ADD.L    D5,D6    *D6 = LAST PIXEL ON SCREEN (BOT RIGHT)
  46.     MOVE.L    D6,A1
  47.     ADD.L    A0,A1    *A1=PHYSICAL VRAM ADDR OF LAST PIXEL
  48.     MOVE.L    A1,A0    
  49.  
  50.     MOVE.L    D7,D3    *SCREENROW
  51.     SUB.L    D5,D3    *SCREENROW-LINE_LENGTH
  52.     
  53.     MULU    #DIST,D7    *SCREENROW * SCROLL STEP
  54.     SUB.L    D7,A0    *A0 = LAST PIXEL OF SOURCE LINE
  55.  
  56.     MOVE.W    NUMB_OF_LINES(A6),D2    *CALCULATE NUMBER OF
  57.     EXT.L    D2    *LINES TO SCROLL
  58.     SUB.L    #DIST+1,D2    *DIST PLUS 1 FOR DBRA
  59.     
  60. SCROLL:    MOVE.L    D5,D4    *LINE LENGTH IN BYTES
  61.     LSR.L    #2,D4    *DIVIDED BY 4 FOR LONGS
  62.     SUBQ.L    #1,D4    *CAUSE DBRA ALWAYS LOOPS ONE MORE THAN COUNT
  63. COPY_LINE:    MOVE.L    -(A0),-(A1)    *MOVE SOURCE LINE TO DESTINATION LINE
  64.     DBRA    D4,COPY_LINE    *UNTIL ALL LONGS HAVE BEEN MOVED
  65.     
  66.     SUB.L    D3,A0
  67.     SUB.L    D3,A1    *POINT TO NEXT LINE
  68.     DBRA    D2,SCROLL    *MOVE ALL LINES
  69.     
  70.     MOVEM.L    (SP)+,D2-D7/A0-A1    *RESTORE REGS
  71.     RTS
  72.     
  73. *********************************VARIABLES FOLLOW********************************
  74. MY_VARS:    DS.B    20    SPACE FOR OUR VARIABLES
  75.  
  76. ******************************OFFSETS INTO VARIABLES*****************************
  77. NUMB_OF_LINES:    RS.W    1    NUMBER OF PHYSICAL LINES ON SCREEN    
  78. VRAM_ADDR:    RS.L    1    ABSOLUTE ADDRESS OF VRAM
  79. LINE_LENGTH:    RS.L    1    ACTUAL LENGTH OF EACH SCREEN LINE